package avaliacao.Handler;

import avaliacao.Constantes;
import avaliacao.DTO.DTOAvaliador;
import avaliacao.DAO.DAOAvaliador;
import avaliacao.Exception.Err;
import avaliacao.Util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FormularioAvaliadorHandler implements HandlerInterface {

    DAOAvaliador daoAvaliador = new DAOAvaliador();

    public String process(HttpServletResponse response, HttpServletRequest request) {

        DTOAvaliador avaliador = new DTOAvaliador();
        String resultado = Constantes.MEC_OK_CADASTRO;

        avaliador.setNome(request.getParameter(Constantes.MEC_AVALIADOR_NOME_FORM_CAMPO));
        avaliador.setLogin(request.getParameter(Constantes.MEC_AVALIADOR_LOGIN_FORM_CAMPO));
        avaliador.setEmail(request.getParameter(Constantes.MEC_AVALIADOR_EMAIL_FORM_CAMPO));
        avaliador.setGrupo(request.getParameter(Constantes.MEC_AVALIADOR_GRUPO_FORM_CAMPO));

        if (!verificarCampos(avaliador)) {
            resultado = Constantes.MEC_ERR_PREENCHIMENTO_FORM_INVALIDO;
        } else if (daoAvaliador.existeLogin(avaliador.getLogin())) {
            resultado = Constantes.MEC_ERR_LOGIN_JA_EXISTE;
        } else {
            if (!daoAvaliador.cadastrarAvaliador(avaliador)) {
                resultado = Constantes.MEC_ERR_CADASTRO;
            }
        }

        request.setAttribute(Constantes.MEC_ATRIBUTO_STATUS, resultado);
        request.setAttribute(Constantes.MEC_AVALIADOR_NOME_FORM_CAMPO, avaliador.getNome());

        return "/cadastroAvaliador.jsp";
    }

    private boolean verificarCampos(DTOAvaliador avaliador) {
        Boolean check = true;

        if (avaliador.getNome().trim().length() != 0) {
            if (!(Util.verificarCamposAlfabeticos(
                    avaliador.getNome(),
                    Constantes.MEC_AVALIADOR_NOME_TAM_MIN,
                    Constantes.MEC_NOME_CARACTERES_VALIDOS).equals(Err.OK))) {
                check = false;
                System.out.println("ERR NOME");
            }
        }

        if (avaliador.getLogin().trim().length() != 0) {
            if (!(Util.verificarCamposAlfabeticos(
                    avaliador.getLogin(),
                    Constantes.MEC_AVALIADOR_LOGIN_TAM_MIN,
                    Constantes.MEC_LOGIN_CARACTERES_VALIDOS).equals(Err.OK))) {
                check = false;
                System.out.println("ERR login");
            }
        }

        if (avaliador.getEmail().trim().length() != 0) {
            //TODO: checar formato do e-mail ... fulano@provedor
            if (!(Util.verificarCamposAlfabeticos(
                    avaliador.getEmail(),
                    Constantes.MEC_AVALIADOR_EMAIL_TAM_MIN,
                    Constantes.MEC_EMAIL_CARACTERES_VALIDOS).equals(Err.OK))) {
                check = false;
                System.out.println("ERR EMAIL");
            }
        }
        return (check);
    }
}
